【Hono】HonoをCDKでAPI Gateway & Lambdaにデプロイする方法
リテールアプリ共創部の戸田駿太です。
最近話題の Hono を、AWS CDK を利用して Lambda で実行する方法を紹介します。
今回の方法は以下の公式ドキュメントに沿って説明しつつ CDK のセットアップについて補足しています。
構成
- Hono v4
- CDK v2
CDK のセットアップ
CDK の環境構築をします。
以下のコマンドから AWS アクセスキー ID、シークレットアクセスキー、デフォルトリージョンを設定します。
参考資料
aws configure
aws configure の項目の例
aws configure
AWS Access Key ID []:
AWS Secret Access Key []:
Default region name [ap-northeast-1]:
Default output format [None]:
以下のコマンドを実行して CDK のセットアップをします。
mkdir my-app
cd my-app
cdk init app -l typescript
mkdir lambda
touch lambda/index.ts
以下のコードをlib/cdk-stack.ts
に記述します。
import * as cdk from 'aws-cdk-lib'
import { Construct } from 'constructs'
import * as lambda from 'aws-cdk-lib/aws-lambda'
import * as apigw from 'aws-cdk-lib/aws-apigateway'
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'
export class MyAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const fn = new NodejsFunction(this, 'lambda', { //lambdaはlambdaの関数名です
entry: 'lambda/index.ts', // このpathで実行ファイルを変更できます
handler: 'handler',
runtime: lambda.Runtime.NODEJS_20_X,
})
fn.addFunctionUrl({
authType: lambda.FunctionUrlAuthType.NONE, // 認証なしに設定
})
new apigw.LambdaRestApi(this, 'myapi', { // myapiはAPI GatewayのAPI名です
handler: fn,
})
}
}
Hono のセットアップ
Hono のインストール
npm i hono
Hono のテストコードを記述
import { Hono } from "hono";
import { handle } from "hono/aws-lambda";
const app = new Hono();
app.get("/", (c) => c.text("Hello Hono!"));
export const handler = handle(app);
実行してみる
cdk でデプロイする
cdk deploy
↓ デプロイの実行結果(一部抜粋)
CdkTestStack: deploying... [1/1]
CdkTestStack: creating CloudFormation changeset...
✅ CdkTestStack
✨ Deployment time: 53.42s
Outputs:
CdkTestStack.myapiEndpoint8EB17201 = https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:000000000000:stack/MyAppStack/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
✨ Total time: 56.85s
デプロイすると cloudformation のページからスタックが作成されたことが確認できます。
実行結果の URL にアクセスすると Hono の実行結果を確認できます。
Outputs:
CdkTestStack.myapiEndpoint8EB17201 = https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/ ←このURL
実行結果(Postman)
補足
モノリスについて
Lambda で Hono を扱うということは Lambda をモノリス(一つの Lambda)で運用するということなので、そのメリットとデメリットは知っておくべきだと思います。
モノリス運用の参考資料
公式ではアンチパターンとされていますが上記の記事で解説がされています。
ローカルで実行
ローカルで実行したい方は以下の記事を参考にしてみてください。
DynamoDB と連携
より実践的にサーバーレスの基本の型である API Gateway - Lambda - DynamoDB を実装する方法を解説している記事です。
まとめ
今回は、Hono を AWS Lambda 上で動作させるための基本的な手順を解説しました。
ぜひ、この記事を参考にして自身のプロジェクトに役立ててください。